home *** CD-ROM | disk | FTP | other *** search
/ Champak 50 / Volume 50 - JOGO DISK .iso / Games / moonstonemadness.swf / scripts / __Packages / SideScroller / Layer.as < prev    next >
Encoding:
Text File  |  2007-09-27  |  12.3 KB  |  415 lines

  1. class SideScroller.Layer extends Library.DispatcherBase
  2. {
  3.    var mcRef;
  4.    var oSSInstance;
  5.    var nLayerType;
  6.    var nAttachMethod;
  7.    var oLayerID;
  8.    var nNextPanelDepth;
  9.    var nNextObjectDepth;
  10.    var nNextRemoveDepth;
  11.    var nNextFrontDepth;
  12.    var nParalaxRatioX;
  13.    var nParalaxRatioY;
  14.    var nOverLap;
  15.    var bFirstPanel;
  16.    var aPanelsLinkages;
  17.    var aPanelsVisual;
  18.    var aObjects;
  19.    var nFloorHeight;
  20.    static var TYPE_STATIC = 1;
  21.    static var TYPE_MOVING = 2;
  22.    static var METHOD_ORDERED = 1;
  23.    static var METHOD_RANDOM = 2;
  24.    static var DEPTH_PANEL_MIN = 1;
  25.    static var DEPTH_PANEL_MAX = 50000;
  26.    static var DEPTH_OBJECT_MIN = 1;
  27.    static var DEPTH_OBJECT_MAX = 50000;
  28.    static var DEPTH_FRONT_MIN = 55000;
  29.    static var DEPTH_FRONT_MAX = 75000;
  30.    static var DEPTH_REMOVE_MIN = 100000;
  31.    static var DEPTH_REMOVE_MAX = 110000;
  32.    static var GROUND_CHECK_MODIFIER = 50;
  33.    static var MAX_HEIGHT = 400;
  34.    function Layer(__oLayerID, __mcRef, __nLayerType, __nAttachMethod, __oSSInstance)
  35.    {
  36.       super();
  37.       this.mcRef = __mcRef;
  38.       this.oSSInstance = __oSSInstance;
  39.       this.mcRef.createEmptyMovieClip("mcPanels",1);
  40.       this.mcRef.createEmptyMovieClip("mcObjects",2);
  41.       this.mcRef.mcPanels.lineStyle(0,0,0);
  42.       this.mcRef.mcPanels.lineTo(1,1);
  43.       this.mcRef.mcObjects.lineStyle(0,0,0);
  44.       this.mcRef.mcObjects.lineTo(1,1);
  45.       this.nLayerType = __nLayerType;
  46.       this.nAttachMethod = __nAttachMethod;
  47.       this.oLayerID = __oLayerID;
  48.       this.nNextPanelDepth = SideScroller.Layer.DEPTH_PANEL_MIN;
  49.       this.nNextObjectDepth = SideScroller.Layer.DEPTH_OBJECT_MIN;
  50.       this.nNextRemoveDepth = SideScroller.Layer.DEPTH_REMOVE_MIN;
  51.       this.nNextFrontDepth = SideScroller.Layer.DEPTH_FRONT_MIN;
  52.       if(this.nLayerType == SideScroller.Layer.TYPE_STATIC)
  53.       {
  54.          this.nParalaxRatioX = 0;
  55.          this.nParalaxRatioY = 0;
  56.       }
  57.       else
  58.       {
  59.          this.nParalaxRatioX = 1;
  60.          this.nParalaxRatioY = 1;
  61.       }
  62.       this.nOverLap = 0;
  63.       this.bFirstPanel = true;
  64.       this.aPanelsLinkages = new Array();
  65.       this.aPanelsVisual = new Array();
  66.       this.aObjects = new Array();
  67.       this.nFloorHeight = Infinity;
  68.       this.oSSInstance.doAddListener(this);
  69.    }
  70.    function doEnterFrame()
  71.    {
  72.       super.doEnterFrame();
  73.       if(this.nLayerType == SideScroller.Layer.TYPE_MOVING)
  74.       {
  75.          this.doCheckLooping();
  76.       }
  77.    }
  78.    function setOverlap(__n)
  79.    {
  80.       this.nOverLap = __n;
  81.    }
  82.    function doAddPanelLinkage(sLinkage)
  83.    {
  84.       this.aPanelsLinkages.push(sLinkage);
  85.       if(this.bFirstPanel)
  86.       {
  87.          this.doAddPanel();
  88.          this.bFirstPanel = false;
  89.       }
  90.    }
  91.    function doAddPanelLinkageSet(aPanelsLinkagesLinkage)
  92.    {
  93.       var _loc2_ = undefined;
  94.       _loc2_ = 0;
  95.       while(_loc2_ <= aPanelsLinkagesLinkage.length - 1)
  96.       {
  97.          this.doAddPanelLinkage(aPanelsLinkagesLinkage[_loc2_]);
  98.          _loc2_ = _loc2_ + 1;
  99.       }
  100.    }
  101.    function doAttachVisual(__sLinkage)
  102.    {
  103.       do
  104.       {
  105.          this.nNextObjectDepth = this.nNextObjectDepth + 1;
  106.          if(this.nNextObjectDepth > SideScroller.Layer.DEPTH_FRONT_MAX)
  107.          {
  108.             this.nNextObjectDepth = SideScroller.Layer.DEPTH_FRONT_MIN;
  109.          }
  110.       }
  111.       while(this.mcRef.mcObjects.getInstanceAtDepth(this.nNextObjectDepth) != undefined);
  112.       
  113.       var _loc2_ = this.mcRef.mcObjects.attachMovie(__sLinkage,"mcObject_" + __sLinkage + "_" + this.nNextObjectDepth,this.nNextObjectDepth);
  114.       return _loc2_;
  115.    }
  116.    function doPutInFront(__mc)
  117.    {
  118.       do
  119.       {
  120.          this.nNextFrontDepth = this.nNextFrontDepth + 1;
  121.          if(this.nNextFrontDepth > SideScroller.Layer.DEPTH_FRONT_MAX)
  122.          {
  123.             this.nNextFrontDepth = SideScroller.Layer.DEPTH_FRONT_MIN;
  124.          }
  125.       }
  126.       while(__mc._parent.getInstanceAtDepth(this.nNextFrontDepth) != undefined);
  127.       
  128.       __mc.swapDepths(this.nNextFrontDepth);
  129.    }
  130.    function doAddObject(__oObject)
  131.    {
  132.       this.aObjects.push(__oObject);
  133.    }
  134.    function doRemoveObject(__oObject)
  135.    {
  136.       if(this.aObjects.length > 0)
  137.       {
  138.          for(var _loc3_ in this.aObjects)
  139.          {
  140.             if(this.aObjects[_loc3_] == __oObject)
  141.             {
  142.                delete this.aObjects[_loc3_];
  143.                this.aObjects.splice(Number(_loc3_),1);
  144.             }
  145.          }
  146.       }
  147.    }
  148.    function getCollidableObjects(__oRequester)
  149.    {
  150.       var _loc9_ = new Array();
  151.       var _loc7_ = __oRequester.Coord;
  152.       var _loc3_ = undefined;
  153.       _loc3_ = 0;
  154.       while(_loc3_ <= this.aObjects.length - 1)
  155.       {
  156.          if(this.aObjects[_loc3_] != __oRequester)
  157.          {
  158.             var _loc2_ = this.aObjects[_loc3_];
  159.             if(_loc2_.Hitable && _loc2_.ObjectBlock)
  160.             {
  161.                var _loc4_ = _loc2_.Coord;
  162.                var _loc5_ = Library.Utils.MoreMath.getDistance(_loc4_.x,_loc4_.y,_loc7_.x,_loc7_.y);
  163.                var _loc6_ = _loc2_.HitDistance + __oRequester.HitDistance;
  164.                if(Math.abs(_loc5_) <= _loc6_)
  165.                {
  166.                   _loc9_.push(_loc2_);
  167.                }
  168.             }
  169.          }
  170.          _loc3_ = _loc3_ + 1;
  171.       }
  172.       return _loc9_;
  173.    }
  174.    function getGroundObjects(__oRequester)
  175.    {
  176.       var _loc4_ = new Array();
  177.       var _loc2_ = undefined;
  178.       _loc2_ = 0;
  179.       while(_loc2_ <= this.aObjects.length - 1)
  180.       {
  181.          if(this.aObjects[_loc2_] != __oRequester)
  182.          {
  183.             var _loc3_ = this.aObjects[_loc2_];
  184.             if(_loc3_.GroundModifier)
  185.             {
  186.                _loc4_.push(_loc3_);
  187.             }
  188.          }
  189.          _loc2_ = _loc2_ + 1;
  190.       }
  191.       return _loc4_;
  192.    }
  193.    function getSpecialObjects(__oRequester)
  194.    {
  195.       var _loc9_ = new Array();
  196.       var _loc7_ = __oRequester.Coord;
  197.       var _loc3_ = undefined;
  198.       _loc3_ = 0;
  199.       while(_loc3_ <= this.aObjects.length - 1)
  200.       {
  201.          if(this.aObjects[_loc3_] != __oRequester)
  202.          {
  203.             var _loc2_ = this.aObjects[_loc3_];
  204.             if(_loc2_.Hitable && _loc2_.ObjectSpecial)
  205.             {
  206.                var _loc4_ = _loc2_.Coord;
  207.                var _loc5_ = Library.Utils.MoreMath.getDistance(_loc4_.x,_loc4_.y,_loc7_.x,_loc7_.y);
  208.                var _loc6_ = _loc2_.HitDistance + __oRequester.HitDistance;
  209.                if(Math.abs(_loc5_) <= _loc6_)
  210.                {
  211.                   _loc9_.push(_loc2_);
  212.                }
  213.             }
  214.          }
  215.          _loc3_ = _loc3_ + 1;
  216.       }
  217.       return _loc9_;
  218.    }
  219.    function getFloorAt(__nPositionX, __nPositionY, __oRequester)
  220.    {
  221.       var _loc5_ = this.nFloorHeight;
  222.       var _loc7_ = new Array();
  223.       var _loc10_ = this.getGroundObjects(SideScroller.BasicObject(__oRequester));
  224.       var _loc2_ = undefined;
  225.       _loc2_ = 0;
  226.       while(_loc2_ <= _loc10_.length - 1)
  227.       {
  228.          var _loc6_ = _loc10_[_loc2_].GroundObject;
  229.          if(_loc6_.StartPos <= __nPositionX && _loc6_.EndPos >= __nPositionX)
  230.          {
  231.             if(_loc6_ instanceof SideScroller.Ground)
  232.             {
  233.                var _loc4_ = _loc6_.getGroundAt(__nPositionX);
  234.                var _loc3_ = true;
  235.                if(_loc4_ > _loc5_)
  236.                {
  237.                   _loc3_ = false;
  238.                }
  239.                else if(__oRequester.Speeds.y < 0)
  240.                {
  241.                   _loc3_ = false;
  242.                }
  243.                else if(_loc4_ < __nPositionY - __oRequester.CliffClimbCapacity - __oRequester.Speeds.y)
  244.                {
  245.                   _loc3_ = false;
  246.                }
  247.                if(_loc3_)
  248.                {
  249.                   _loc5_ = _loc4_;
  250.                }
  251.             }
  252.             else if(_loc6_ instanceof SideScroller.NegativeGround)
  253.             {
  254.                _loc7_.push(_loc6_);
  255.             }
  256.          }
  257.          _loc2_ = _loc2_ + 1;
  258.       }
  259.       if(_loc5_ == this.nFloorHeight)
  260.       {
  261.          _loc2_ = 0;
  262.          while(_loc2_ <= _loc7_.length - 1)
  263.          {
  264.             _loc6_ = _loc7_[_loc2_];
  265.             if(_loc6_.getGroundAt() > _loc5_)
  266.             {
  267.                _loc5_ = _loc6_.getGroundAt();
  268.             }
  269.             _loc2_ = _loc2_ + 1;
  270.          }
  271.       }
  272.       return _loc5_;
  273.    }
  274.    function doMoveTo(__nX, __nY)
  275.    {
  276.       this.mcRef._x = __nX * this.nParalaxRatioX;
  277.       this.mcRef._y = __nY * this.nParalaxRatioY;
  278.    }
  279.    function getRemoveDepth(__mc)
  280.    {
  281.       do
  282.       {
  283.          this.nNextRemoveDepth = this.nNextRemoveDepth + 1;
  284.          if(this.nNextRemoveDepth > SideScroller.Layer.DEPTH_REMOVE_MAX)
  285.          {
  286.             this.nNextRemoveDepth = SideScroller.Layer.DEPTH_REMOVE_MIN;
  287.          }
  288.       }
  289.       while(__mc._parent.getInstanceAtDepth(this.nNextRemoveDepth) != undefined);
  290.       
  291.       return this.nNextRemoveDepth;
  292.    }
  293.    function doDestroy()
  294.    {
  295.       this.oSSInstance.doRemoveListener(this);
  296.       for(var _loc3_ in this.aPanelsVisual)
  297.       {
  298.          this.doRemoveObjectsIn(this.aPanelsVisual[_loc3_]);
  299.       }
  300.       for(_loc3_ in this.aObjects)
  301.       {
  302.          this.aObjects[_loc3_].doDestroy();
  303.       }
  304.       delete this.aPanelsVisual;
  305.       delete this.aObjects;
  306.       delete this.oSSInstance;
  307.       this.mcRef.swapDepths(this.getRemoveDepth(this.mcRef));
  308.       this.mcRef.removeMovieClip();
  309.       delete this.mcRef;
  310.       super.doDestroy();
  311.    }
  312.    function get AllObjects()
  313.    {
  314.       return Library.Utils.Tools.doCopyArray(this.aObjects);
  315.    }
  316.    function get Id()
  317.    {
  318.       return this.oLayerID;
  319.    }
  320.    function get PanelsWidth()
  321.    {
  322.       return this.mcRef.mcPanels._width;
  323.    }
  324.    function get PanelsHeight()
  325.    {
  326.       return Math.min(this.mcRef.mcPanels._height,SideScroller.Layer.MAX_HEIGHT);
  327.    }
  328.    function get PanelsRef()
  329.    {
  330.       return this.Ref.mcPanels;
  331.    }
  332.    function get Ref()
  333.    {
  334.       return this.mcRef;
  335.    }
  336.    function set ParalaxRatioX(__nParalaxRatioX)
  337.    {
  338.       this.nParalaxRatioX = __nParalaxRatioX;
  339.    }
  340.    function set ParalaxRatioY(__nParalaxRatioY)
  341.    {
  342.       this.nParalaxRatioY = __nParalaxRatioY;
  343.    }
  344.    function set BaseFloor(__nFloorHeight)
  345.    {
  346.       this.nFloorHeight = __nFloorHeight;
  347.    }
  348.    function doCheckLooping()
  349.    {
  350.       var _loc2_ = this.PanelsWidth + this.mcRef._x;
  351.       if(_loc2_ <= this.oSSInstance.StageWidth + SideScroller.SideScrollerManager.LOOP_BUFFER)
  352.       {
  353.          this.doAddPanel(this.PanelsWidth);
  354.       }
  355.       this.doCheckForPanelRemoval();
  356.    }
  357.    function doAddPanel(__nPosition)
  358.    {
  359.       var _loc3_ = undefined;
  360.       var _loc2_ = undefined;
  361.       switch(this.nAttachMethod)
  362.       {
  363.          case SideScroller.Layer.METHOD_ORDERED:
  364.             if(this.aPanelsLinkages.length > 0)
  365.             {
  366.                _loc3_ = String(this.aPanelsLinkages.shift());
  367.                _loc2_ = true;
  368.             }
  369.             else
  370.             {
  371.                _loc2_ = false;
  372.             }
  373.             break;
  374.          case SideScroller.Layer.METHOD_RANDOM:
  375.             var _loc5_ = Library.Utils.MoreMath.getRandomRange(0,this.aPanelsLinkages.length - 1);
  376.             _loc3_ = this.aPanelsLinkages[_loc5_];
  377.             _loc2_ = true;
  378.       }
  379.       if(_loc2_)
  380.       {
  381.          var _loc4_ = this.mcRef.mcPanels.attachMovie(_loc3_,"mcPanel" + this.nNextPanelDepth,this.nNextPanelDepth);
  382.          _loc4_._x = __nPosition - this.nOverLap;
  383.          this.aPanelsVisual.push(_loc4_);
  384.          this.nNextPanelDepth = this.nNextPanelDepth + 1;
  385.          if(this.nNextPanelDepth > SideScroller.Layer.DEPTH_PANEL_MAX)
  386.          {
  387.             this.nNextPanelDepth = SideScroller.Layer.DEPTH_PANEL_MIN;
  388.          }
  389.       }
  390.    }
  391.    function doRemoveObjectsIn(__mcContainer)
  392.    {
  393.       var _loc2_ = undefined;
  394.       for(_loc2_ in this.aObjects)
  395.       {
  396.          if(String(this.aObjects[_loc2_].Ref).indexOf(String(__mcContainer)) != -1)
  397.          {
  398.             this.aObjects[_loc2_].doDestroy();
  399.          }
  400.       }
  401.    }
  402.    function doCheckForPanelRemoval()
  403.    {
  404.       var _loc2_ = this.aPanelsVisual[0];
  405.       var _loc3_ = undefined;
  406.       _loc3_ = _loc2_._x + _loc2_._width + this.mcRef._x;
  407.       if(_loc3_ < - SideScroller.SideScrollerManager.LOOP_BUFFER)
  408.       {
  409.          this.doRemoveObjectsIn(_loc2_);
  410.          _loc2_.removeMovieClip();
  411.          this.aPanelsVisual.shift();
  412.       }
  413.    }
  414. }
  415.